﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using Entities;
using Entities.Modelo;

namespace DataAccessLayer
{
    public class RepositorioFornecedor : ObjectEntity, ICadastro<Fornecedor>
    {
        public RepositorioFornecedor()
            : base()
        {

        }

        public void InserirCadastro(Fornecedor objeto)
        {
            tbFornecedor tbFornecedor = ComporObjetoFornecedorEntity(objeto);
            dataContext.AddTotbFornecedor(tbFornecedor);
            dataContext.SaveChanges();
        }

        public void AlterarCadastro(Fornecedor objeto)
        {
            tbFornecedor tbFornecedorEditado = ComporObjetoFornecedorEntity(objeto);
            tbFornecedor tbFornecedorAtual = dataContext.tbFornecedor.Where(x => x.ID == objeto.ID).FirstOrDefault();
            dataContext.ApplyCurrentValues(tbFornecedorAtual.EntityKey.EntitySetName, tbFornecedorEditado);
            dataContext.SaveChanges();
        }

        public void ExcluirCadastro(Fornecedor objeto)
        {

            tbFornecedor tbFornecedorEditado = ComporObjetoFornecedorEntity(objeto);
            tbFornecedorEditado.Ativo = false;
            tbFornecedor tbFornecedorAtual = dataContext.tbFornecedor.Where(x => x.ID == objeto.ID).FirstOrDefault();
            dataContext.ApplyCurrentValues(tbFornecedorAtual.EntityKey.EntitySetName, tbFornecedorEditado);
            dataContext.SaveChanges();
        }

        public Fornecedor RetornarCadastro(int chave)
        {
            return (from f in dataContext.tbFornecedor
                    select new Fornecedor
                    {
                        ID = f.ID,
                        Nome = f.Nome,
                        Telefone = f.Telefone,
                        Contato = f.Contato,
                        Ativo = f.Ativo,
                        Site = f.Site

                    }).Where(fornecedor => fornecedor.Ativo == true).FirstOrDefault();
        }

        public IList<Fornecedor> RetornarDados()
        {
            return (from f in dataContext.tbFornecedor
                    select new Fornecedor
                    {
                        ID = f.ID,
                        Nome = f.Nome,
                        Telefone = f.Telefone,
                        Contato = f.Contato,
                        Ativo = f.Ativo,
                        Site = f.Site

                    }).Where(fornecedor => fornecedor.Ativo == true).ToList();
        }


        private tbFornecedor ComporObjetoFornecedorEntity(Fornecedor objeto)
        {
            tbFornecedor tbFornecedorEditado = new tbFornecedor();
            tbFornecedorEditado.ID = (int)objeto.ID;
            tbFornecedorEditado.Nome = objeto.Nome;
            tbFornecedorEditado.Telefone = objeto.Telefone;
            tbFornecedorEditado.Contato = objeto.Contato;
            tbFornecedorEditado.Ativo = objeto.Ativo;
            tbFornecedorEditado.Site = objeto.Site;
            return tbFornecedorEditado;
        }
    }
}

